package tables

// Policy 策略表，
// 信息采集一般都是周期性的。startTime 和 endTime 都是0
// 特定时间做某件事，例如删除文件等，这种是一次性的，因此不用考虑cycle，但是需要考虑 startTime 和 endTime，只能在这个时间内执行。
type Policy struct {
	Id         int64  `json:"id,string" gorm:"primaryKey"`
	TaskName   string `json:"taskName"`         // 任务名称，eg: 获取CPU信息
	TaskLv     int    `json:"taskLv"`           // 任务级别：1- 守卫；2-一般插件,3-主程序(非插件获取)
	Cmd        string `json:"cmd"`              // 插件
	Args       string `json:"args"`             // 参数
	ResultType string `json:"resultType"`       // 对信息细节进行二次分流处理,策略下发时就需要标记好会返回的结果的内容，用string 是为了更好的使用反射调用处理方法
	Cycle      string `json:"cycle"`            // 执行间隔，month-月、week-周、day-天、hour-小时、minute-分钟
	Num        int    `json:"num"`              // 间隔数值
	Times      int    `json:"times"`            // 执行次数 1-一次性，2-周期性
	StartTime  int64  `json:"startTime,string"` // 开始时间，0表示无限制
	EndTime    int64  `json:"endTime,string"`   // 结束时间，0-无限制
	Status     int    `json:"status"`           // 1-正常；2-正常停止；3-管理员强制停止
	IsBoot     bool   `json:"isBoot"`           // 是否需要在程序启动时强制触发策略，例如硬件类检测
	IsDial     bool   `json:"isDial"`           // 是否需要在网络重连时强制触发策略，例如本地策略更新、IP地址检查等等
	CheckField string `json:"checkField"`       // 检查数据变化时需要考虑的字段，这里是对象的属性名，不是json的key。因为这段值会被反射调用
}

func (r *Policy) TableName() string {
	return "policy"
}
